<!DOCTYPE html>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>optimize_aop [HALCON算子参考手册]</title>
<style type="text/css">
      body {
    color: #000000;
    background-color: #ffffff;
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
}

.body_main {
    margin-left: 35px;
    margin-right: 35px;
}

@media screen and (min-width:992px) {

    .body_main {
        margin-left: 10%;
        margin-right: 10%;
    }

    table.toctable {
        width: 80%
    }
}

@media screen and (min-width:1400px) {

    .body_main {
        margin-left: 15%;
        margin-right: 15%;
    }

    table.toctable {
        width: 70%
    }
}

body>div ul ul {
    margin-left: inherit;
}

a:link {
    color: #0044cc;
}

a:link,
a:visited {
    text-decoration: none;
}

a:link:hover,
a:visited:hover {
    text-decoration: underline;
}

th {
    text-align: left;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    text-rendering: optimizeLegibility;
    color: #666666;
}

code {
    font-family: monospace,monospace;
}

h1 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

h2 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

hr {
    border: 0;
    border-top: solid 1px #f28d26;
}

.pre {
    display: block;
    padding-bottom: 1ex;
    font-family: monospace;
    white-space: pre;
}

pre {
    font-family: monospace, monospace;
    padding: 1ex;
    white-space: pre-wrap;
}

.toc {
    font-size: 80%;
    border-top: 1px dashed #f28d26;
    border-bottom: 1px dashed #f28d26;
    padding-top: 5px;
    padding-bottom: 5px;
}

.inv {
    margin: 0;
    border: 0;
    padding: 0;
}

.banner {
    color: #666666;
    padding-left: 1em;
}

.logo {
    background-color: white;
}

.keyboard {
    font-size: 80%;
    padding-left: 3px;
    padding-right: 3px;
    border-radius: 5px;
    border-width: 1px;
    border-style: solid;
    border-color: #f28d26;
    background-color: #f3f3f3;
}

.warning {
    margin-top: 2ex;
    margin-bottom: 1ex;
    padding: 10px;
    text-align: center;
    border: 1px solid;
    color: #bb0000;
    background-color: #fff7f7
}

.imprint {
    margin-top: 1ex;
    font-size: 80%;
    color: #666666;
}

.imprinthead {
    font-weight: bolder;
    color: #666666;
}

.indexlink {
    text-align: right;
    padding-bottom: 5px;
}

.postscript {
    margin-top: 2ex;
    font-size: 80%;
    color: #666666
}

.evenrow {
    background-color: #e7e7ef;
    vertical-align: top;
}

.oddrow {
    background-color: #f7f7ff;
    vertical-align: top;
}

.headrow {
    background-color: #97979f;
    color: #ffffff;
    vertical-align: top;
}

.logorow {
    vertical-align: top;
}

.error {
    color: red;
}

.var {
    font-style: italic
}

.halconoperator {
    font-family: monospace, monospace;
}

span.operator {
    font-family: monospace, monospace;
}

span.procedure {
    font-family: monospace, monospace;
}

span.operation {
    font-family: monospace, monospace;
}

span.feature {
    font-family: Arial, Helvetica, Homerton, sans-serif;
}

ul {
    padding-left: 1.2em;
}

li.dot {
    list-style-type: square;
    color: #f28d26;
}

.breadcrumb {
    font-size: 80%;
    color: white;
    background-color: #062d64;
    margin-bottom: 20px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 15px;
}

.webbar {
    font-size: 80%;
    background-color: #dddddd;
    margin-top: 0px;
    margin-left: -35px;
    margin-right: -35px;
    margin-bottom: 0px;
    padding-top: 5px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 5px;
}

.footer {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    border-top: 1px dashed #f28d26;
    font-size: 80%;
    color: #666666;
    padding-bottom: 8px;
}

.footer .socialmedia a {
    padding-left: 7px;
}

.socialmedia {
    padding-top: 10px;
}

.copyright {
    margin-top: 19px;
}

.breadcrumb a {
    color: #ffffff;
    border-bottom: 1px solid white;
}

.breadcrumb a:link:hover,
.breadcrumb a:visited:hover {
    text-decoration: none;
    border-bottom: none;
}

.heading {
    margin-top: 1ex;
    font-size: 110%;
    font-weight: bold;
    color: #666666;
}

.text {
    color: black;
}

.example {
    font-size: 80%;
    background-color: #f3f3f3;
    border: 1px dashed #666666;
    padding: 10px;
}

.displaymath {
    display: block;
    text-align: center;
    margin-top: 1ex;
    margin-bottom: 1ex;
}

.title {
    float: left;
    padding-top: 3px;
    padding-bottom: 3px;
}

.signnote {
    font-family: Arial, Helvetica, Homerton, sans-serif;
    font-size: 80%;
    color: #666666;
    font-weight: lighter;
    font-style: italic
}

.par {
    margin-bottom: 1.5em;
}

.parhead {
    text-align: right;
}

.parname {
    float: left;
}

.pardesc {
    font-size: 85%;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
    margin-left: 2em;
}

.parcat {
    color: #666;
    font-weight: bold;
}

*[data-if=cpp],
*[data-if=c],
*[data-if=dotnet],
*[data-if=com],
*[data-if=python] {
    display: none;
}

.tabbar {
    text-align: right;
    border-bottom: 1px solid #f28d26;
    margin-bottom: 0.5em;
}

ul.tabs {
    padding-top: 3px;
    padding-bottom: 3px;
    margin-top: 10px;
    margin-bottom: 0;
    font-size: 80%
}

ul.tabs li {
    padding-top: 3px;
    padding-bottom: 3px;
    display: inline;
    overflow: hidden;
    list-style-type: none;
    margin: 0;
    margin-left: 8px;
    border-top: 1px solid #666;
    border-left: 1px solid #666;
    border-right: 1px solid #666;
}

ul.tabs li.active {
    border-left: 1px solid #f28d26;
    border-right: 1px solid #f28d26;
    border-top: 1px solid #f28d26;
    border-bottom: 1px solid #fff;
}

ul.tabs li.inactive {
    background-color: #eee;
}

ul.tabs li a {
    padding-left: 5px;
    padding-right: 5px;
    color: #666;
}

ul.tabs li a:link:hover {
    text-decoration: none;
}

ul.tabs li.inactive a {
    color: #666;
}

ul.tabs li.active a {
    color: black;
}

dl.generic dd {
    margin-bottom: 1em;
}

.pari {
    color: olive;
}

.paro {
    color: maroon;
}

.comment {
    font-size: 80%;
    color: green;
    white-space: nowrap;
}

table.grid {
    border-collapse: collapse;
}

table.grid td {
    padding: 5px;
    border: 1px solid;
}

table.layout {
    border: 0px;
}

table.layout td {
    padding: 5px;
}

table.table {
    border-collapse: collapse;
}

table.table td {
    padding: 5px;
    border-left: 0px;
    border-right: 0px;
}

table.table tr:last-child {
    border-bottom: 1px solid;
}

table.table th {
    padding: 5px;
    border-top: 1px solid;
    border-bottom: 1px solid;
    border-left: 0px;
    border-right: 0px;
}

.details_summary {
    cursor: pointer;
}

table.toctable {
    width: 100%;
}

table.toctable col:first-child {
    width: 20%;
}

table.toctable col:nth-last-child(2) {
    width: 8%;
}

table.altcolored tr:nth-child(even) {
    background-color: #f3f3f3;
}

    </style>
<!--OP_REF_STYLE_END-->
<script>
    <!--
var active_lang='hdevelop';function switchVisibility(obj,active_lang,new_lang)
{var display_style='inline';
for(var i=0;i<obj.length;i++)
{if(obj.item(i).getAttribute('data-if')==new_lang)
{obj.item(i).style.display=display_style;}
if(obj.item(i).getAttribute('data-if')==active_lang)
{obj.item(i).style.display='none';}}
return;}
function toggleLanguage(new_lang,initial)
{if(active_lang!=new_lang)
{var lis=document.getElementsByTagName('li');for(var i=0;i<lis.length;i++)
{if(lis.item(i).id=='syn-'+new_lang)
{lis.item(i).className='active';}
else
{lis.item(i).className='inactive';}}
var divs=document.getElementsByTagName('div');var spans=document.getElementsByTagName('span');switchVisibility(divs,active_lang,new_lang);switchVisibility(spans,active_lang,new_lang);if(!initial)
{setCookie("halcon_reference_language",new_lang,null,null);}
active_lang=new_lang;}
return;}
function setCookie(name,value,domain,exp_offset,path,secure)
{localStorage.setItem(name,value);}
function getCookie(name)
{return localStorage.getItem(name);}
function initialize()
{var qs=location.href.split('?')[1];var qs_lang_raw=location.href.split('interface=')[1];var qs_lang;if(qs_lang_raw)
{qs_lang=qs_lang_raw.split('#')[0];}
var cookie_lang=getCookie("halcon_reference_language");var new_lang;if((qs_lang=="hdevelop")||(qs_lang=="dotnet")||(qs_lang=="python")||(qs_lang=="cpp")||(qs_lang=="c"))
{new_lang=qs_lang;setCookie("halcon_reference_language",new_lang,null,null);}
else if((cookie_lang=="hdevelop")||(cookie_lang=="dotnet")||(cookie_lang=="python")||(cookie_lang=="cpp")||(cookie_lang=="c"))
{new_lang=cookie_lang;}
else
{new_lang="hdevelop";}
toggleLanguage(new_lang,1);return;}
-->

  </script>
</head>
<body onload="initialize();">
<div class="breadcrumb">
<br class="inv"><a href="index.html">目录</a> / <a href="toc_system.html">系统</a> / <a href="toc_system_parallelization.html">Parallelization</a><br class="inv">
</div>
<div class="body_main">
<div class="tabbar"><ul class="tabs">
<li id="syn-hdevelop" class="active"><a href="javascript:void(0);" onclick="toggleLanguage('hdevelop')" onfocus="blur()">HDevelop</a></li>
<li id="syn-dotnet" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('dotnet')" onfocus="blur()">.NET</a></li>
<li id="syn-python" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('python')" onfocus="blur()">Python</a></li>
<li id="syn-cpp" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('cpp')" onfocus="blur()">C++</a></li>
<li id="syn-c" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('c')" onfocus="blur()">C</a></li>
</ul></div>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<!--OP_REF_HEADER_END-->
<h1 id="sec_name">
<span data-if="hdevelop" style="display:inline;">optimize_aop</span><span data-if="c" style="display:none;">T_optimize_aop</span><span data-if="cpp" style="display:none;">OptimizeAop</span><span data-if="dotnet" style="display:none;">OptimizeAop</span><span data-if="python" style="display:none;">optimize_aop</span> (算子名称)</h1>
<h2>名称</h2>
<p><code><span data-if="hdevelop" style="display:inline;">optimize_aop</span><span data-if="c" style="display:none;">T_optimize_aop</span><span data-if="cpp" style="display:none;">OptimizeAop</span><span data-if="dotnet" style="display:none;">OptimizeAop</span><span data-if="python" style="display:none;">optimize_aop</span></code> — Check hardware regarding its potential for automatic operator
parallelization.</p>
<h2 id="sec_synopsis">参数签名</h2>
<div data-if="hdevelop" style="display:inline;">
<p>
<code><b>optimize_aop</b>( :  : <a href="#OperatorName"><i>OperatorName</i></a>, <a href="#IconicType"><i>IconicType</i></a>, <a href="#FileName"><i>FileName</i></a>, <a href="#GenParamName"><i>GenParamName</i></a>, <a href="#GenParamValue"><i>GenParamValue</i></a> : )</code></p>
</div>
<div data-if="c" style="display:none;">
<p>
<code>Herror <b>T_optimize_aop</b>(const Htuple <a href="#OperatorName"><i>OperatorName</i></a>, const Htuple <a href="#IconicType"><i>IconicType</i></a>, const Htuple <a href="#FileName"><i>FileName</i></a>, const Htuple <a href="#GenParamName"><i>GenParamName</i></a>, const Htuple <a href="#GenParamValue"><i>GenParamValue</i></a>)</code></p>
</div>
<div data-if="cpp" style="display:none;">
<p>
<code>void <b>OptimizeAop</b>(const HTuple&amp; <a href="#OperatorName"><i>OperatorName</i></a>, const HTuple&amp; <a href="#IconicType"><i>IconicType</i></a>, const HTuple&amp; <a href="#FileName"><i>FileName</i></a>, const HTuple&amp; <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>)</code></p>
<p>
<code>static void <a href="HSystem.html">HSystem</a>::<b>OptimizeAop</b>(const HTuple&amp; <a href="#OperatorName"><i>OperatorName</i></a>, const HTuple&amp; <a href="#IconicType"><i>IconicType</i></a>, const HTuple&amp; <a href="#FileName"><i>FileName</i></a>, const HTuple&amp; <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>)</code></p>
<p>
<code>static void <a href="HSystem.html">HSystem</a>::<b>OptimizeAop</b>(const HString&amp; <a href="#OperatorName"><i>OperatorName</i></a>, const HString&amp; <a href="#IconicType"><i>IconicType</i></a>, const HString&amp; <a href="#FileName"><i>FileName</i></a>, const HTuple&amp; <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>)</code></p>
<p>
<code>static void <a href="HSystem.html">HSystem</a>::<b>OptimizeAop</b>(const char* <a href="#OperatorName"><i>OperatorName</i></a>, const char* <a href="#IconicType"><i>IconicType</i></a>, const char* <a href="#FileName"><i>FileName</i></a>, const HTuple&amp; <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>)</code></p>
<p>
<code>static void <a href="HSystem.html">HSystem</a>::<b>OptimizeAop</b>(const wchar_t* <a href="#OperatorName"><i>OperatorName</i></a>, const wchar_t* <a href="#IconicType"><i>IconicType</i></a>, const wchar_t* <a href="#FileName"><i>FileName</i></a>, const HTuple&amp; <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>)  <span class="signnote">
            (
            Windows only)
          </span></code></p>
</div>
<div data-if="com" style="display:none;"></div>
<div data-if="dotnet" style="display:none;">
<p>
<code>static void <a href="HOperatorSet.html">HOperatorSet</a>.<b>OptimizeAop</b>(<a href="HTuple.html">HTuple</a> <a href="#OperatorName"><i>operatorName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#IconicType"><i>iconicType</i></a>, <a href="HTuple.html">HTuple</a> <a href="#FileName"><i>fileName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamName"><i>genParamName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamValue"><i>genParamValue</i></a>)</code></p>
<p>
<code>static void <a href="HSystem.html">HSystem</a>.<b>OptimizeAop</b>(<a href="HTuple.html">HTuple</a> <a href="#OperatorName"><i>operatorName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#IconicType"><i>iconicType</i></a>, <a href="HTuple.html">HTuple</a> <a href="#FileName"><i>fileName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamName"><i>genParamName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamValue"><i>genParamValue</i></a>)</code></p>
<p>
<code>static void <a href="HSystem.html">HSystem</a>.<b>OptimizeAop</b>(string <a href="#OperatorName"><i>operatorName</i></a>, string <a href="#IconicType"><i>iconicType</i></a>, string <a href="#FileName"><i>fileName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamName"><i>genParamName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamValue"><i>genParamValue</i></a>)</code></p>
</div>
<div data-if="python" style="display:none;">
<p>
<code>def <b>optimize_aop</b>(<a href="#OperatorName"><i>operator_name</i></a>: MaybeSequence[str], <a href="#IconicType"><i>iconic_type</i></a>: MaybeSequence[str], <a href="#FileName"><i>file_name</i></a>: Union[str, int], <a href="#GenParamName"><i>gen_param_name</i></a>: Sequence[str], <a href="#GenParamValue"><i>gen_param_value</i></a>: Sequence[Union[str, float, int]]) -&gt; None</code></p>
</div>
<h2 id="sec_description">描述</h2>
<p>HALCON supports automatic operator parallelization (AOP) for  various
operators.
<code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code> is necessary for an efficient automatic
parallelization, what HALCON uses to speed up the execution of operators. As
the parallelization of operators is done automatically, there is no need for
the user to explicitly prepare or change programs for their parallelization.
Thus, all HALCON-based programs can be used without adaptations on
multiprocessor hardware and users benefit from the potential of parallel
hardware. By default, HALCON uses the maximum available number of threads
for AOP, up to the number of processors. But, depending on the data size and
the parameter set passed to an operator, parallelizing on the maximum thread
number might be too excessive and inefficient. <code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code>
optimizes the AOP in terms of thread number and checks a given hardware
with respect to a parallel processing of HALCON operators. In doing so,
it examines every
operator, which can be possibly be sped up by an automatic parallelization
on tuple, channel, or domain level (the partial level is not considered).
Each examined operator is executed several times - both sequentially and
parallel - with a changing set of input parameter values/images. The
latter helps to evaluate dependencies between an operator's input parameter
characteristics (e.g., the size of an input image) and the efficiency of its
parallel processing. This may take up to a couple of hours depending on the
settings of 该算子's parameters. It is essential for a correct
optimization not to run any other computation-intensive application
simultaneously on the machine, as this would strongly influence the time
measurements of the hardware check and thus would lead to wrong results.
</p>
<p>Overall, <code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code> performs several test loops and
collects a lot of hardware-specific information which enables HALCON
to optimize the automatic parallelization for a given hardware. The
hardware information can be stored in a binary file given by
<a href="#FileName"><i><code><span data-if="hdevelop" style="display:inline">FileName</span><span data-if="c" style="display:none">FileName</span><span data-if="cpp" style="display:none">FileName</span><span data-if="com" style="display:none">FileName</span><span data-if="dotnet" style="display:none">fileName</span><span data-if="python" style="display:none">file_name</span></code></i></a> so that it can be used again in future HALCON sessions
or even transferred to other machines, identical in hardware. When passing an
empty string
<i><span data-if="hdevelop" style="display:inline">''</span><span data-if="c" style="display:none">""</span><span data-if="cpp" style="display:none">""</span><span data-if="com" style="display:none">""</span><span data-if="dotnet" style="display:none">""</span><span data-if="python" style="display:none">""</span></i> as file name, <code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code> stores the optimization data
to the specific HALCON system file '.aop_info' in the HALCON installation
directory (in Linux, see environment variable $HALCONROOT) or within
the common application data  folder (Windows). This specific file is
automatically read when
initializing HALCON during the first operator call.
Note that the user must have appropriate privileges
for read and write access. <code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code> will check the file access
before starting the AOP optimization and return an appropriate error when
failing. The written file can be
read by using 该算子 <a href="read_aop_knowledge.html"><code><span data-if="hdevelop" style="display:inline">read_aop_knowledge</span><span data-if="c" style="display:none">read_aop_knowledge</span><span data-if="cpp" style="display:none">ReadAopKnowledge</span><span data-if="com" style="display:none">ReadAopKnowledge</span><span data-if="dotnet" style="display:none">ReadAopKnowledge</span><span data-if="python" style="display:none">read_aop_knowledge</span></code></a> again.
</p>
<p>Thus, it is sufficient, to start
<code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code> once on each  multiprocessor  machine that
is used for parallel processing. Of course, it should be started again,
if the hardware of the machine changes, for example, by installing
a new CPU, new memory, or if the operating system of the machine changes.
It is necessary to start <code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code> once for each new processing
environment  as the time response of operators may differ. A new processing
environment is given, if different operating systems, such as Windows and
Linux, or different HALCON architectures, different HALCON variants are
used, i.e., HALCON  versus HALCON XL, or when updating to a new HALCON
version or revision. Together with
the machine's host name, these dependencies form the knowledge attributes
and are stored to the file together with the AOP optimization data. The
attributes identify the machine-specific AOP knowledge set
and enable the storage of different knowledge sets to the same file.
</p>
<p><code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code> offers a set of parameters to restrict the
extensiveness and specify the behavior of the optimization process. A subset
of HALCON operators can be passed to <a href="#OperatorName"><i><code><span data-if="hdevelop" style="display:inline">OperatorName</span><span data-if="c" style="display:none">OperatorName</span><span data-if="cpp" style="display:none">OperatorName</span><span data-if="com" style="display:none">OperatorName</span><span data-if="dotnet" style="display:none">operatorName</span><span data-if="python" style="display:none">operator_name</span></code></i></a>. This will
restrict the optimization process to 该算子s passed by their name.
When passing an empty string <i><span data-if="hdevelop" style="display:inline">''</span><span data-if="c" style="display:none">""</span><span data-if="cpp" style="display:none">""</span><span data-if="com" style="display:none">""</span><span data-if="dotnet" style="display:none">""</span><span data-if="python" style="display:none">""</span></i>, all operators will be tested.
A subset of iconic types that should be checked can be set by parameter
<a href="#IconicType"><i><code><span data-if="hdevelop" style="display:inline">IconicType</span><span data-if="c" style="display:none">IconicType</span><span data-if="cpp" style="display:none">IconicType</span><span data-if="com" style="display:none">IconicType</span><span data-if="dotnet" style="display:none">iconicType</span><span data-if="python" style="display:none">iconic_type</span></code></i></a>. Again, passing an empty string <i><span data-if="hdevelop" style="display:inline">''</span><span data-if="c" style="display:none">""</span><span data-if="cpp" style="display:none">""</span><span data-if="com" style="display:none">""</span><span data-if="dotnet" style="display:none">""</span><span data-if="python" style="display:none">""</span></i>
will test all supported iconic types. Further settings to modify the
optimization process can be parameterized by a pair of
values passed to <a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a> and <a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a>. Every
entry in <a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a> must have a corresponding entry in
<a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a>, meaning the tuples passed to the parameters must
have the same length. <a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a> supports the values in
following list, specifying for each possible value for <a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a>
all possible applicable values for <a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a>:
</p>
<dl class="generic">

<dt><b><i><span data-if="hdevelop" style="display:inline">'none'</span><span data-if="c" style="display:none">"none"</span><span data-if="cpp" style="display:none">"none"</span><span data-if="com" style="display:none">"none"</span><span data-if="dotnet" style="display:none">"none"</span><span data-if="python" style="display:none">"none"</span></i></b></dt>
<dd><p>
 does nothing specific but ignores the parameter
<a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a>.
</p></dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'system_mode'</span><span data-if="c" style="display:none">"system_mode"</span><span data-if="cpp" style="display:none">"system_mode"</span><span data-if="com" style="display:none">"system_mode"</span><span data-if="dotnet" style="display:none">"system_mode"</span><span data-if="python" style="display:none">"system_mode"</span></i>, <i><span data-if="hdevelop" style="display:inline">'file_mode'</span><span data-if="c" style="display:none">"file_mode"</span><span data-if="cpp" style="display:none">"file_mode"</span><span data-if="com" style="display:none">"file_mode"</span><span data-if="dotnet" style="display:none">"file_mode"</span><span data-if="python" style="display:none">"file_mode"</span></i></b></dt>
<dd>
<p>
 set the way how the
information of the system or file, respectively, gets updated.
</p>
<dl class="generic">

<dt><b><i><span data-if="hdevelop" style="display:inline">'truncate'</span><span data-if="c" style="display:none">"truncate"</span><span data-if="cpp" style="display:none">"truncate"</span><span data-if="com" style="display:none">"truncate"</span><span data-if="dotnet" style="display:none">"truncate"</span><span data-if="python" style="display:none">"truncate"</span></i></b></dt>
<dd><p>
 for <a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a> deletes
all the existing information before the new knowledge loaded from file
is added.
</p></dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'renew'</span><span data-if="c" style="display:none">"renew"</span><span data-if="cpp" style="display:none">"renew"</span><span data-if="com" style="display:none">"renew"</span><span data-if="dotnet" style="display:none">"renew"</span><span data-if="python" style="display:none">"renew"</span></i></b></dt>
<dd><p>
 overwrites existing knowledge and adds new one
(default).
</p></dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'append'</span><span data-if="c" style="display:none">"append"</span><span data-if="cpp" style="display:none">"append"</span><span data-if="com" style="display:none">"append"</span><span data-if="dotnet" style="display:none">"append"</span><span data-if="python" style="display:none">"append"</span></i></b></dt>
<dd><p>
 keeps all existing operator information and just
adds the knowledge not already contained.
</p></dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'nil'</span><span data-if="c" style="display:none">"nil"</span><span data-if="cpp" style="display:none">"nil"</span><span data-if="com" style="display:none">"nil"</span><span data-if="dotnet" style="display:none">"nil"</span><span data-if="python" style="display:none">"nil"</span></i></b></dt>
<dd><p>
 performs the optimization process but refuses any
update of the system or file, respectively.
</p></dd>
</dl>
</dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'parameters'</span><span data-if="c" style="display:none">"parameters"</span><span data-if="cpp" style="display:none">"parameters"</span><span data-if="com" style="display:none">"parameters"</span><span data-if="dotnet" style="display:none">"parameters"</span><span data-if="python" style="display:none">"parameters"</span></i></b></dt>
<dd><p>
 also tests for appropriate operator
parameters if the corresponding value of <a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a> is
set to <i><span data-if="hdevelop" style="display:inline">'true'</span><span data-if="c" style="display:none">"true"</span><span data-if="cpp" style="display:none">"true"</span><span data-if="com" style="display:none">"true"</span><span data-if="dotnet" style="display:none">"true"</span><span data-if="python" style="display:none">"true"</span></i>. These operator parameters are supposed to
show significant influence on 该算子's processing time like
string parameters
picking up a certain operator mode or method or, e.g., parameters
setting a filter size. <i><span data-if="hdevelop" style="display:inline">'false'</span><span data-if="c" style="display:none">"false"</span><span data-if="cpp" style="display:none">"false"</span><span data-if="com" style="display:none">"false"</span><span data-if="dotnet" style="display:none">"false"</span><span data-if="python" style="display:none">"false"</span></i> dismisses the parameter check
in favor of a faster knowledge identification (default).
</p></dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'model'</span><span data-if="c" style="display:none">"model"</span><span data-if="cpp" style="display:none">"model"</span><span data-if="com" style="display:none">"model"</span><span data-if="dotnet" style="display:none">"model"</span><span data-if="python" style="display:none">"model"</span></i></b></dt>
<dd>
<p>
 sets the underlying simulation of the behavior of
parallelizing operators on the current hardware. Different
models can be selected by <a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a> differing in
hardware adaptability and computation time:
</p>
<dl class="generic">

<dt><b><i><span data-if="hdevelop" style="display:inline">'threshold'</span><span data-if="c" style="display:none">"threshold"</span><span data-if="cpp" style="display:none">"threshold"</span><span data-if="com" style="display:none">"threshold"</span><span data-if="dotnet" style="display:none">"threshold"</span><span data-if="python" style="display:none">"threshold"</span></i></b></dt>
<dd><p>
 determines if it is profitable
to run on the maximum thread number or not. This is default on
dual processor systems.
</p></dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'linear'</span><span data-if="c" style="display:none">"linear"</span><span data-if="cpp" style="display:none">"linear"</span><span data-if="com" style="display:none">"linear"</span><span data-if="dotnet" style="display:none">"linear"</span><span data-if="python" style="display:none">"linear"</span></i></b></dt>
<dd><p>
 specifies a linear scale model to determine
the best thread number for a given data size and parameter set. This
is default on multiprocessor systems.
</p></dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'mlp'</span><span data-if="c" style="display:none">"mlp"</span><span data-if="cpp" style="display:none">"mlp"</span><span data-if="com" style="display:none">"mlp"</span><span data-if="dotnet" style="display:none">"mlp"</span><span data-if="python" style="display:none">"mlp"</span></i></b></dt>
<dd><p>
 is the most complex but also most adaptable model.
Note that the optimization process can take a couple of hours
depending on the used hardware topology.
</p></dd>
</dl>
</dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'timeout'</span><span data-if="c" style="display:none">"timeout"</span><span data-if="cpp" style="display:none">"timeout"</span><span data-if="com" style="display:none">"timeout"</span><span data-if="dotnet" style="display:none">"timeout"</span><span data-if="python" style="display:none">"timeout"</span></i></b></dt>
<dd><p>
 sets a maximum execution time for a
tested operator. If the execution of an operator exceeds the timeout,
the test on this operator is aborted. No information about this
operator will be stored in this case. The timeout value is set by
<a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a> in seconds. Specifying <i><span data-if="hdevelop" style="display:inline">'infinite'</span><span data-if="c" style="display:none">"infinite"</span><span data-if="cpp" style="display:none">"infinite"</span><span data-if="com" style="display:none">"infinite"</span><span data-if="dotnet" style="display:none">"infinite"</span><span data-if="python" style="display:none">"infinite"</span></i>
prevents any abortion of an operator's optimization process (default).
</p></dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'split_level'</span><span data-if="c" style="display:none">"split_level"</span><span data-if="cpp" style="display:none">"split_level"</span><span data-if="com" style="display:none">"split_level"</span><span data-if="dotnet" style="display:none">"split_level"</span><span data-if="python" style="display:none">"split_level"</span></i></b></dt>
<dd>
<p>
 restricts the optimization process on a
certain parallelization method. The corresponding value of
<a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a> can contain one of the following values,
therefore:
</p>
<dl class="generic">

<dt><b><i><span data-if="hdevelop" style="display:inline">'split_domain'</span><span data-if="c" style="display:none">"split_domain"</span><span data-if="cpp" style="display:none">"split_domain"</span><span data-if="com" style="display:none">"split_domain"</span><span data-if="dotnet" style="display:none">"split_domain"</span><span data-if="python" style="display:none">"split_domain"</span></i></b></dt>
<dd><p>
 performs the check on all image
processing operators supporting data parallelization on domain level.
</p></dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'split_channel'</span><span data-if="c" style="display:none">"split_channel"</span><span data-if="cpp" style="display:none">"split_channel"</span><span data-if="com" style="display:none">"split_channel"</span><span data-if="dotnet" style="display:none">"split_channel"</span><span data-if="python" style="display:none">"split_channel"</span></i></b></dt>
<dd><p>
 performs the check on all image
processing operators supporting data parallelization on channel
level.
</p></dd>

<dt><b><i><span data-if="hdevelop" style="display:inline">'split_tuple'</span><span data-if="c" style="display:none">"split_tuple"</span><span data-if="cpp" style="display:none">"split_tuple"</span><span data-if="com" style="display:none">"split_tuple"</span><span data-if="dotnet" style="display:none">"split_tuple"</span><span data-if="python" style="display:none">"split_tuple"</span></i></b></dt>
<dd><p>
 performs the check on all
operators supporting data parallelization on tuple level.
</p></dd>
</dl>
</dd>
</dl> <h2 id="sec_attention">注意</h2>
<p>During its test loops <code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code> has to start
every examined operator several times. Thus, the processing time of
<code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code> can be rather  long depending on 该算子's
parameter settings. It is essential for a correct
optimization not run any other computation-intensive application
simultaneously on the machine, as this would strongly influence the time
measurements of the hardware check and thus would lead to wrong results.
Note that according to the file location
<code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code> must be called by users with the appropriate
privileges for storing the
parallelization information. See 该算子's description
above for more details about these subjects.
</p>
<h2 id="sec_execution">运行信息</h2>
<ul>
  <li>Multithreading type: exclusive (runs in parallel only with independent operators).</li>
<li>多线程作用域:全局(可以从任何线程调用)。</li>
  <li>未经并行化处理。</li>
</ul>
<h2 id="sec_parameters">参数表</h2>
  <div class="par">
<div class="parhead">
<span id="OperatorName" class="parname"><b><code><span data-if="hdevelop" style="display:inline">OperatorName</span><span data-if="c" style="display:none">OperatorName</span><span data-if="cpp" style="display:none">OperatorName</span><span data-if="com" style="display:none">OperatorName</span><span data-if="dotnet" style="display:none">operatorName</span><span data-if="python" style="display:none">operator_name</span></code></b> (input_control)  </span><span>string(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">MaybeSequence[str]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string)</span><span data-if="dotnet" style="display:none"> (<i>string</i>)</span><span data-if="cpp" style="display:none"> (<i>HString</i>)</span><span data-if="c" style="display:none"> (<i>char*</i>)</span></span>
</div>
<p class="pardesc">Operators to check</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">''</span>
    <span data-if="c" style="display:none">""</span>
    <span data-if="cpp" style="display:none">""</span>
    <span data-if="com" style="display:none">""</span>
    <span data-if="dotnet" style="display:none">""</span>
    <span data-if="python" style="display:none">""</span>
</p>
</div>
  <div class="par">
<div class="parhead">
<span id="IconicType" class="parname"><b><code><span data-if="hdevelop" style="display:inline">IconicType</span><span data-if="c" style="display:none">IconicType</span><span data-if="cpp" style="display:none">IconicType</span><span data-if="com" style="display:none">IconicType</span><span data-if="dotnet" style="display:none">iconicType</span><span data-if="python" style="display:none">iconic_type</span></code></b> (input_control)  </span><span>string(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">MaybeSequence[str]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string)</span><span data-if="dotnet" style="display:none"> (<i>string</i>)</span><span data-if="cpp" style="display:none"> (<i>HString</i>)</span><span data-if="c" style="display:none"> (<i>char*</i>)</span></span>
</div>
<p class="pardesc">Iconic object types to check</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">''</span>
    <span data-if="c" style="display:none">""</span>
    <span data-if="cpp" style="display:none">""</span>
    <span data-if="com" style="display:none">""</span>
    <span data-if="dotnet" style="display:none">""</span>
    <span data-if="python" style="display:none">""</span>
</p>
<p class="pardesc"><span class="parcat">Suggested values:
      </span><span data-if="hdevelop" style="display:inline">''</span><span data-if="c" style="display:none">""</span><span data-if="cpp" style="display:none">""</span><span data-if="com" style="display:none">""</span><span data-if="dotnet" style="display:none">""</span><span data-if="python" style="display:none">""</span>, <span data-if="hdevelop" style="display:inline">'byte'</span><span data-if="c" style="display:none">"byte"</span><span data-if="cpp" style="display:none">"byte"</span><span data-if="com" style="display:none">"byte"</span><span data-if="dotnet" style="display:none">"byte"</span><span data-if="python" style="display:none">"byte"</span>, <span data-if="hdevelop" style="display:inline">'int1'</span><span data-if="c" style="display:none">"int1"</span><span data-if="cpp" style="display:none">"int1"</span><span data-if="com" style="display:none">"int1"</span><span data-if="dotnet" style="display:none">"int1"</span><span data-if="python" style="display:none">"int1"</span>, <span data-if="hdevelop" style="display:inline">'int2'</span><span data-if="c" style="display:none">"int2"</span><span data-if="cpp" style="display:none">"int2"</span><span data-if="com" style="display:none">"int2"</span><span data-if="dotnet" style="display:none">"int2"</span><span data-if="python" style="display:none">"int2"</span>, <span data-if="hdevelop" style="display:inline">'uint2'</span><span data-if="c" style="display:none">"uint2"</span><span data-if="cpp" style="display:none">"uint2"</span><span data-if="com" style="display:none">"uint2"</span><span data-if="dotnet" style="display:none">"uint2"</span><span data-if="python" style="display:none">"uint2"</span>, <span data-if="hdevelop" style="display:inline">'int4'</span><span data-if="c" style="display:none">"int4"</span><span data-if="cpp" style="display:none">"int4"</span><span data-if="com" style="display:none">"int4"</span><span data-if="dotnet" style="display:none">"int4"</span><span data-if="python" style="display:none">"int4"</span>, <span data-if="hdevelop" style="display:inline">'int8'</span><span data-if="c" style="display:none">"int8"</span><span data-if="cpp" style="display:none">"int8"</span><span data-if="com" style="display:none">"int8"</span><span data-if="dotnet" style="display:none">"int8"</span><span data-if="python" style="display:none">"int8"</span>, <span data-if="hdevelop" style="display:inline">'direction'</span><span data-if="c" style="display:none">"direction"</span><span data-if="cpp" style="display:none">"direction"</span><span data-if="com" style="display:none">"direction"</span><span data-if="dotnet" style="display:none">"direction"</span><span data-if="python" style="display:none">"direction"</span>, <span data-if="hdevelop" style="display:inline">'cyclic'</span><span data-if="c" style="display:none">"cyclic"</span><span data-if="cpp" style="display:none">"cyclic"</span><span data-if="com" style="display:none">"cyclic"</span><span data-if="dotnet" style="display:none">"cyclic"</span><span data-if="python" style="display:none">"cyclic"</span>, <span data-if="hdevelop" style="display:inline">'vector_field'</span><span data-if="c" style="display:none">"vector_field"</span><span data-if="cpp" style="display:none">"vector_field"</span><span data-if="com" style="display:none">"vector_field"</span><span data-if="dotnet" style="display:none">"vector_field"</span><span data-if="python" style="display:none">"vector_field"</span>, <span data-if="hdevelop" style="display:inline">'complex'</span><span data-if="c" style="display:none">"complex"</span><span data-if="cpp" style="display:none">"complex"</span><span data-if="com" style="display:none">"complex"</span><span data-if="dotnet" style="display:none">"complex"</span><span data-if="python" style="display:none">"complex"</span>, <span data-if="hdevelop" style="display:inline">'region'</span><span data-if="c" style="display:none">"region"</span><span data-if="cpp" style="display:none">"region"</span><span data-if="com" style="display:none">"region"</span><span data-if="dotnet" style="display:none">"region"</span><span data-if="python" style="display:none">"region"</span>, <span data-if="hdevelop" style="display:inline">'xld'</span><span data-if="c" style="display:none">"xld"</span><span data-if="cpp" style="display:none">"xld"</span><span data-if="com" style="display:none">"xld"</span><span data-if="dotnet" style="display:none">"xld"</span><span data-if="python" style="display:none">"xld"</span>, <span data-if="hdevelop" style="display:inline">'xld_cont'</span><span data-if="c" style="display:none">"xld_cont"</span><span data-if="cpp" style="display:none">"xld_cont"</span><span data-if="com" style="display:none">"xld_cont"</span><span data-if="dotnet" style="display:none">"xld_cont"</span><span data-if="python" style="display:none">"xld_cont"</span>, <span data-if="hdevelop" style="display:inline">'xld_poly'</span><span data-if="c" style="display:none">"xld_poly"</span><span data-if="cpp" style="display:none">"xld_poly"</span><span data-if="com" style="display:none">"xld_poly"</span><span data-if="dotnet" style="display:none">"xld_poly"</span><span data-if="python" style="display:none">"xld_poly"</span></p>
</div>
  <div class="par">
<div class="parhead">
<span id="FileName" class="parname"><b><code><span data-if="hdevelop" style="display:inline">FileName</span><span data-if="c" style="display:none">FileName</span><span data-if="cpp" style="display:none">FileName</span><span data-if="com" style="display:none">FileName</span><span data-if="dotnet" style="display:none">fileName</span><span data-if="python" style="display:none">file_name</span></code></b> (input_control)  </span><span>filename.write <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Union[str, int]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>string</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>HString</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>char*</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Knowledge file name</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">''</span>
    <span data-if="c" style="display:none">""</span>
    <span data-if="cpp" style="display:none">""</span>
    <span data-if="com" style="display:none">""</span>
    <span data-if="dotnet" style="display:none">""</span>
    <span data-if="python" style="display:none">""</span>
</p>
</div>
  <div class="par">
<div class="parhead">
<span id="GenParamName" class="parname"><b><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></b> (input_control)  </span><span>string-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[str]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string)</span><span data-if="dotnet" style="display:none"> (<i>string</i>)</span><span data-if="cpp" style="display:none"> (<i>HString</i>)</span><span data-if="c" style="display:none"> (<i>char*</i>)</span></span>
</div>
<p class="pardesc">Parameter name</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">'none'</span>
    <span data-if="c" style="display:none">"none"</span>
    <span data-if="cpp" style="display:none">"none"</span>
    <span data-if="com" style="display:none">"none"</span>
    <span data-if="dotnet" style="display:none">"none"</span>
    <span data-if="python" style="display:none">"none"</span>
</p>
<p class="pardesc"><span class="parcat">Suggested values:
      </span><span data-if="hdevelop" style="display:inline">'parameters'</span><span data-if="c" style="display:none">"parameters"</span><span data-if="cpp" style="display:none">"parameters"</span><span data-if="com" style="display:none">"parameters"</span><span data-if="dotnet" style="display:none">"parameters"</span><span data-if="python" style="display:none">"parameters"</span>, <span data-if="hdevelop" style="display:inline">'model'</span><span data-if="c" style="display:none">"model"</span><span data-if="cpp" style="display:none">"model"</span><span data-if="com" style="display:none">"model"</span><span data-if="dotnet" style="display:none">"model"</span><span data-if="python" style="display:none">"model"</span>, <span data-if="hdevelop" style="display:inline">'timeout'</span><span data-if="c" style="display:none">"timeout"</span><span data-if="cpp" style="display:none">"timeout"</span><span data-if="com" style="display:none">"timeout"</span><span data-if="dotnet" style="display:none">"timeout"</span><span data-if="python" style="display:none">"timeout"</span>, <span data-if="hdevelop" style="display:inline">'file_mode'</span><span data-if="c" style="display:none">"file_mode"</span><span data-if="cpp" style="display:none">"file_mode"</span><span data-if="com" style="display:none">"file_mode"</span><span data-if="dotnet" style="display:none">"file_mode"</span><span data-if="python" style="display:none">"file_mode"</span>, <span data-if="hdevelop" style="display:inline">'system_mode'</span><span data-if="c" style="display:none">"system_mode"</span><span data-if="cpp" style="display:none">"system_mode"</span><span data-if="com" style="display:none">"system_mode"</span><span data-if="dotnet" style="display:none">"system_mode"</span><span data-if="python" style="display:none">"system_mode"</span>, <span data-if="hdevelop" style="display:inline">'split_level'</span><span data-if="c" style="display:none">"split_level"</span><span data-if="cpp" style="display:none">"split_level"</span><span data-if="com" style="display:none">"split_level"</span><span data-if="dotnet" style="display:none">"split_level"</span><span data-if="python" style="display:none">"split_level"</span></p>
</div>
  <div class="par">
<div class="parhead">
<span id="GenParamValue" class="parname"><b><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></b> (input_control)  </span><span>string-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[str, float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string / </span><span data-if="hdevelop" style="display:inline">real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>string</i> / </span><span data-if="dotnet" style="display:none">double / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>HString</i> / </span><span data-if="cpp" style="display:none">double / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>char*</i> / </span><span data-if="c" style="display:none">double / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Parameter value</p>
<p class="pardesc"><span class="parcat">Number of elements:
      </span>GenParamName == GenParamValue</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">'none'</span>
    <span data-if="c" style="display:none">"none"</span>
    <span data-if="cpp" style="display:none">"none"</span>
    <span data-if="com" style="display:none">"none"</span>
    <span data-if="dotnet" style="display:none">"none"</span>
    <span data-if="python" style="display:none">"none"</span>
</p>
<p class="pardesc"><span class="parcat">Suggested values:
      </span><span data-if="hdevelop" style="display:inline">'true'</span><span data-if="c" style="display:none">"true"</span><span data-if="cpp" style="display:none">"true"</span><span data-if="com" style="display:none">"true"</span><span data-if="dotnet" style="display:none">"true"</span><span data-if="python" style="display:none">"true"</span>, <span data-if="hdevelop" style="display:inline">'renew'</span><span data-if="c" style="display:none">"renew"</span><span data-if="cpp" style="display:none">"renew"</span><span data-if="com" style="display:none">"renew"</span><span data-if="dotnet" style="display:none">"renew"</span><span data-if="python" style="display:none">"renew"</span>, <span data-if="hdevelop" style="display:inline">'truncate'</span><span data-if="c" style="display:none">"truncate"</span><span data-if="cpp" style="display:none">"truncate"</span><span data-if="com" style="display:none">"truncate"</span><span data-if="dotnet" style="display:none">"truncate"</span><span data-if="python" style="display:none">"truncate"</span>, <span data-if="hdevelop" style="display:inline">'threshold'</span><span data-if="c" style="display:none">"threshold"</span><span data-if="cpp" style="display:none">"threshold"</span><span data-if="com" style="display:none">"threshold"</span><span data-if="dotnet" style="display:none">"threshold"</span><span data-if="python" style="display:none">"threshold"</span>, <span data-if="hdevelop" style="display:inline">'linear'</span><span data-if="c" style="display:none">"linear"</span><span data-if="cpp" style="display:none">"linear"</span><span data-if="com" style="display:none">"linear"</span><span data-if="dotnet" style="display:none">"linear"</span><span data-if="python" style="display:none">"linear"</span>, <span data-if="hdevelop" style="display:inline">'mlp'</span><span data-if="c" style="display:none">"mlp"</span><span data-if="cpp" style="display:none">"mlp"</span><span data-if="com" style="display:none">"mlp"</span><span data-if="dotnet" style="display:none">"mlp"</span><span data-if="python" style="display:none">"mlp"</span>, -1.0</p>
</div>
<h2 id="sec_result">结果</h2>
<p><code><span data-if="hdevelop" style="display:inline">optimize_aop</span><span data-if="c" style="display:none">optimize_aop</span><span data-if="cpp" style="display:none">OptimizeAop</span><span data-if="com" style="display:none">OptimizeAop</span><span data-if="dotnet" style="display:none">OptimizeAop</span><span data-if="python" style="display:none">optimize_aop</span></code> returns <TT>2</TT> (
      <TT>H_MSG_TRUE</TT>)
     if all parameters are correct and
the file could be read. 如有必要，将引发异常。
</p>
<h2 id="sec_module">模块</h2>
<p>
Foundation</p>
<!--OP_REF_FOOTER_START-->
<hr>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<div class="footer">
<div class="copyright">HALCON算子参考手册 Copyright © 2015-2023 51Halcon</div>
</div>
</div>
</body>
</html>
